package com.efast.dmom.mgmt.dao.mes;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.efast.dmom.mgmt.bean.mes.ProductConfigAcceptBean;
import com.efast.dmom.mgmt.bean.mes.WorkOrderInfoDto;
import com.efast.dmom.mgmt.bean.mes.qm.QMCheckAreaBean;
import com.efast.dmom.mgmt.bean.mes.qm.QMCheckDefectCodeBean;
import com.efast.dmom.mgmt.bean.mes.qm.QMCheckItemBean;
import com.efast.dmom.mgmt.bean.mes.qm.QMCheckPartBean;
import com.efast.dmom.mgmt.entity.mes.TrBasProductConfig;
import com.efast.dmom.mgmt.utils.Assist;
public interface TrBasProductConfigDao{
	/**
	 * 获得TrBasProductConfig数据的总行数,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null
	 * @param assist
	 * @return
	 */
    long getTrBasProductConfigRowCount(Assist assist);
	/**
	 * 获得TrBasProductConfig数据集合,可以通过辅助工具Assist进行条件查询,如果没有条件则传入null
	 * @param assist
	 * @return
	 */
    List<TrBasProductConfig> selectTrBasProductConfig(Assist assist);
	/**
	 * 获得一个TrBasProductConfig对象,以参数TrBasProductConfig对象中不为空的属性作为条件进行查询
	 * @param obj
	 * @return
	 */
    TrBasProductConfig selectTrBasProductConfigByObj(TrBasProductConfig obj);
	/**
	 * 通过TrBasProductConfig的id获得TrBasProductConfig对象
	 * @param id
	 * @return
	 */
    TrBasProductConfig selectTrBasProductConfigById(Integer id);
	/**
	 * 插入TrBasProductConfig到数据库,包括null值
	 * @param value
	 * @return
	 */
    int insertTrBasProductConfig(TrBasProductConfig value);
	/**
	 * 插入TrBasProductConfig中属性值不为null的数据到数据库
	 * @param value
	 * @return
	 */
    int insertNonEmptyTrBasProductConfig(TrBasProductConfig value);
	/**
	 * 批量插入TrBasProductConfig到数据库,包括null值
	 * @param value
	 * @return
	 */
    int insertTrBasProductConfigByBatch(List<TrBasProductConfig> value);
	/**
	 * 通过TrBasProductConfig的id删除TrBasProductConfig
	 * @param id
	 * @return
	 */
    int deleteTrBasProductConfigById(Integer id);
	/**
	 * 通过辅助工具Assist的条件删除TrBasProductConfig
	 * @param assist
	 * @return
	 */
    int deleteTrBasProductConfig(Assist assist);
	/**
	 * 通过TrBasProductConfig的id更新TrBasProductConfig中的数据,包括null值
	 * @param enti
	 * @return
	 */
    int updateTrBasProductConfigById(TrBasProductConfig enti);
 	/**
	 * 通过辅助工具Assist的条件更新TrBasProductConfig中的数据,包括null值
	 * @param value
	 * @param assist
	 * @return
	 */
    int updateTrBasProductConfig(@Param("enti") TrBasProductConfig value, @Param("assist") Assist assist);
	/**
	 * 通过TrBasProductConfig的id更新TrBasProductConfig中属性不为null的数据
	 * @param enti
	 * @return
	 */
    int updateNonEmptyTrBasProductConfigById(TrBasProductConfig enti);
 	/**
	 * 通过辅助工具Assist的条件更新TrBasProductConfig中属性不为null的数据
	 * @param value
	 * @param assist
	 * @return
	 */
    int updateNonEmptyTrBasProductConfig(@Param("enti") TrBasProductConfig value, @Param("assist") Assist assist);
    
    List<Integer> getOperationIdByStationName(@Param(value = "stationId") Integer stationId);
    /**
	 * 更新tr_bas_product_config表中的quality_gete字段
	 * @param value
	 * @param assist
	 * @return
	 */
    void updateIsQualityGate (@Param(value = "isQualityGate") Boolean isQualityGate,@Param(value = "productConfigId") Integer productConfigId);
    
    void saveAttachFormId(@Param(value = "productConfigId") int productConfigId, @Param(value = "formId") String formId);
    
    List<String> getGenerateFromId(@Param(value = "routeId") int routeId, @Param(value = "operationId") int operationId);
    
    String getFormIdByProductConfigId(@Param(value = "productConfigId") int productConfigId);
    /**
	 * 查询tr_bas_product_config表中的quality_gete字段
	 * @param value
	 * @param assist
	 * @return
	 */
    String selectQualityGate (@Param(value = "operationId") Integer operationId,@Param(value = "stationId") Integer stationId,@Param(value = "routeName") String routeName,@Param(value = "partNoVersion") String partNoVersion);
    
    String selectDefectFlagFromSome (@Param(value = "operationId") Integer operationId,@Param(value = "stationId") Integer stationId,@Param(value = "routeName") String routeName,@Param(value = "partNoVersion") String partNoVersion);
    
    String selectQualityGateByid(@Param(value = "productConfigId") Integer productConfigId);
    
    String selectShowDefectSectionGateByid(@Param(value = "productConfigId") Integer productConfigId);
    
    void updateDefectCodeFlag(@Param(value = "productConfigId") Integer productConfigId, @Param(value = "showDefectSection") Boolean showDefectSection);
    
    /**
	 * 查询bomItem表中的所有的零件
	 * @param 
	 * @param 
	 * @return List
	 */
    List<QMCheckPartBean> selectAllBomItemPart(@Param("partNoVersion")String partNoVersion);
    
    
    /**
   	 * 查询区域表中的区域名
   	 * @param 
   	 * @param 
   	 * @return List
   	 */
       List<QMCheckAreaBean> selectAllArea();
       
       
       /**
      	 * 查询qm_bas_shop_defectcode表中的检测项通过工位
      	 * @param 
      	 * @param 
      	 * @return List
      	 */
          List<QMCheckItemBean> selectItemfromShop(@Param(value = "stationId") Integer stationId);
          
          
          /**
        	 * 查询qm_bas_shop_defectcode表中的缺陷代码通过检测项
        	 * @param 
        	 * @param 
        	 * @return List
        	 */
          List<QMCheckDefectCodeBean> selectDefectcodefromItem(@Param(value = "itemName") String itemName,@Param("workshopNo") String workshopNo);
            
		 void updateIsInAndOut(@Param(value = "isInPullOut") Boolean isInPullOut, @Param(value = "productConfigId") Integer productConfigId);
		
		 public String selectShowInAndOutSectionGateByid(@Param(value = "productConfigId") Integer productConfigId);
		 public void updateIsAutoStart(@Param(value = "isAutoStart") Boolean isAutoStart,@Param(value = "productConfigId") Integer productConfigId);
		 public String selectIsAutoStartSectionGateByid(@Param(value = "productConfigId") Integer productConfigId);
		 
		 /**
	     	 * 是否为合拼工位通过tr_bas_product_config的id查询 是否为拼接的工位（0：否，1：是）
	     	 * @param 
	     	 * @param 
	     	 * @return List
	     	 */
		 public Integer selectSpliceByid (Integer id);
			 
			 
		 Integer saveIsSplice(@Param("productConfigId")Integer productConfigId, @Param("isSplice")Integer isSplice);
		 void updateIsCertificate(@Param(value = "isCertificate") Boolean isCertificate,@Param(value = "productConfigId") Integer productConfigId);
		 public String selectIsCertificateSectionGateByid(@Param(value = "productConfigId") Integer productConfigId);
		 //配置是否为vin绑定工位
		 void updateIsVinBinding(@Param(value = "isVinBinding") Boolean isVinBinding,@Param(value = "productConfigId") Integer productConfigId);
		 //根据配置Id获取配置信息
		 public String selectIsVinBindingSectionGateByid(@Param(value = "productConfigId") Integer productConfigId);
		 
		 //通过id查询工艺路线
		 String selectRouteNameByProductConfigId(@Param(value = "productConfigId") Integer productConfigId);
		 
		 //通过工艺路线和首工位标识查询
		 WorkOrderInfoDto selectWorkOrderInfoDto(@Param(value = "routeName") String routeName);
		 
		 //配置是否配置为首工位
		void updateIsShowHeadStation(@Param(value = "isShowHeadStation") Boolean isShowHeadStation,@Param(value = "productConfigId") Integer productConfigId);
		
		//配置项item更新
		void updateConfigurationItem(ProductConfigAcceptBean productConfigAcceptBean);
		
		//通过id查询是否为首工位
		String selectHeadStationByid(@Param(value = "productConfigId") Integer productConfigId);
		
		void updateConfigurationItemByNull(ProductConfigAcceptBean productConfigAcceptBean);
		
		 
		 
		 
		 
		 
		 
		 
}